package com.ftg.learn.chapter08.pattern.myreflech;

import java.lang.reflect.Field;

/**
 * 机器人
 * 反射机制
 *
 * @author lijiaxin
 * @version 1.0
 * @date 2023/8/5 9:15
 */

public class Robot {

    private String privateStr;
    public String publicStr;
    String defaultstr;
    protected String protectedStr;

    /**
     * 类的实例工厂
     */
    public static Object getBeanByFactory(Class cl){
        try {
            return cl.newInstance();
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
//        1.类的名称
        Class robot=Robot.class;
        Object obj=null;
        try {
            obj=robot.newInstance();
            //        rebot -- Rebot 关联对象
            Field[] fields = robot.getDeclaredFields();

            //新型遍历方式  增强型for forEach
            for (Field f : fields) {
                if (f.getName().equals("publicStr")) {
                    f.set(obj, "我叫张三");
                } else {
                    f.set(obj, "我叫李四");
                }

                System.out.printf("字段名称为%s==>値为%s\n", f.getName(), f.get(obj));
//            f : 这个字段的关联对象  f 可以直接操作原始字段
//                System.out.println(f.getName());
            }
        } catch (InstantiationException | IllegalAccessException e) {
            e.printStackTrace();
        }

    }
}
